package com.hvgroup.modules.sanic.util;

import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


public class FileUploader {

    public String uploadFile(MultipartFile multipartFile, String apiKey, String userId, String url) {
//        // 1. 将MultipartFile转换为临时文件
//        File tempFile = transferToTempFile(multipartFile);
//
//        // 2. 构建请求URL和请求头
////        String url = "http://43.139.223.236:18000/v1/files/upload";
//        Map<String, String> headers = new HashMap<>();
//        headers.put("Authorization", "Bearer " + apiKey);
//
//        // 3. 发送多部分表单请求
//        HttpResponse response = HttpRequest.post(url)
//                .addHeaders(headers)
//                .form("file", tempFile)
//                .form("user", userId)
//                .execute();
//
//        // 4. 清理临时文件
//        FileUtil.del(tempFile);
//
//        // 5. 处理响应
//        if (response.isOk()) {
//            return response.body();
//        } else {
//            throw new RuntimeException("上传失败: " + response.getStatus() + " - " + response.body());
//        }

        try {
            // 1. 直接从MultipartFile获取文件内容和文件名
            String fileName = multipartFile.getOriginalFilename();
            byte[] fileBytes = multipartFile.getBytes();

            // 2. 构建请求头
            Map<String, String> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + apiKey);

            // 3. 发送多部分表单请求（直接使用字节数组和文件名）
            HttpResponse response = HttpRequest.post(url)
                    .addHeaders(headers)
                    .form("file", fileBytes, fileName)  // 直接使用文件字节数组和文件名
                    .form("user", userId)
                    .execute();

            // 4. 处理响应
            if (response.isOk()) {
                return response.body();
            } else {
                throw new RuntimeException("上传失败: " + response.getStatus() + " - " + response.body());
            }
        } catch (IOException e) {
            throw new RuntimeException("文件处理失败", e);
        }



    }

    private File transferToTempFile(MultipartFile multipartFile) {
        try {
            File tempFile = File.createTempFile("upload_", ".tmp");
            multipartFile.transferTo(tempFile);
            return tempFile;
        } catch (Exception e) {
            throw new RuntimeException("文件转换失败", e);
        }
    }
}